package com.kbbywyclient.di;

import android.app.ProgressDialog;
import android.content.Context;

import com.kbbywyclient.di.component.BoughtTableComponent;
import com.kbbywyclient.di.component.BoughtTableCreditComponent;
import com.kbbywyclient.di.component.CustomerTableComponent;
import com.kbbywyclient.di.component.ErrorCorrectionComponent;
import com.kbbywyclient.di.component.InfoCertifyCreditComponent;
import com.kbbywyclient.di.component.InfoCertifyLoanComponent;
import com.kbbywyclient.di.component.LoginComponent;
import com.kbbywyclient.di.component.MainComponent;
import com.kbbywyclient.di.component.MatchTableComponent;
import com.kbbywyclient.di.component.MineScoreComponent;
import com.kbbywyclient.di.component.ModifyInfoComponent;
import com.kbbywyclient.di.component.MyBusinessConComponent;
import com.kbbywyclient.di.component.ProductManageComponent;
import com.kbbywyclient.di.component.ProductTableComponent;
import com.kbbywyclient.di.component.PwdModifyComponent;
import com.kbbywyclient.di.component.RechargeComponent;
import com.kbbywyclient.di.component.RecommendScoreComponent;
import com.kbbywyclient.di.component.RegisterComponent;
import com.kbbywyclient.di.component.RetrievePwdOneComponent;
import com.kbbywyclient.di.component.RetrievePwdThreeComponent;
import com.kbbywyclient.di.component.RetrievePwdTwoComponent;
import com.kbbywyclient.di.component.ScoreDetailComponent;
import com.kbbywyclient.di.component.SettingComponent;
import com.kbbywyclient.di.module.BoughtTableCreditModule;
import com.kbbywyclient.di.module.BoughtTableModule;
import com.kbbywyclient.di.module.CustomerTableModule;
import com.kbbywyclient.di.module.ErrorCorrectionModule;
import com.kbbywyclient.di.module.InfoCertifyCreditModule;
import com.kbbywyclient.di.module.InfoCertifyLoanModule;
import com.kbbywyclient.di.module.LoginModule;
import com.kbbywyclient.di.module.MainModule;
import com.kbbywyclient.di.module.MatchTableModule;
import com.kbbywyclient.di.module.MineScoreModule;
import com.kbbywyclient.di.module.ModifyInfoModule;
import com.kbbywyclient.di.module.MyBusinessConModule;
import com.kbbywyclient.di.module.ProductManageModule;
import com.kbbywyclient.di.module.ProductTableModule;
import com.kbbywyclient.di.module.PwdModifyModule;
import com.kbbywyclient.di.module.RechargeModule;
import com.kbbywyclient.di.module.RecommendScoreModule;
import com.kbbywyclient.di.module.RegisterModule;
import com.kbbywyclient.di.module.RetrievePwdOneModule;
import com.kbbywyclient.di.module.RetrievePwdThreeModule;
import com.kbbywyclient.di.module.RetrievePwdTwoModule;
import com.kbbywyclient.di.module.ScoreDetailModule;
import com.kbbywyclient.di.module.SettingModule;
import com.kbbywyclient.service.ApiService;

import javax.inject.Singleton;

import dagger.Component;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;

/**
 * Created by FHW
 * on 2017/3/21
 */

@Singleton
@Component(modules = {AppModule.class, NetworkModule.class})
public interface AppComponent {

    Context context();

    OkHttpClient getOkHttpClient();

    ProgressDialog getProgressDialog();

    Retrofit getRetrofit();

    ApiService getApiService();

    //activity  暴露对应activity的component
    MainComponent getMainComponent(MainModule mainModule);

    RegisterComponent getRegisterComponent(RegisterModule registerModule);

    LoginComponent getLoginComponent(LoginModule loginModule);

    RetrievePwdOneComponent getRetrievePwdOneComponent(RetrievePwdOneModule retrievePwdOneModule);

    RetrievePwdTwoComponent getRetrievePwdTwoComponent(RetrievePwdTwoModule retrievePwdOneModule);

    RetrievePwdThreeComponent getRetrievePwdThreeComponent(RetrievePwdThreeModule retrievePwdThreeModule);

    MatchTableComponent getMatchTableComponent(MatchTableModule matchTableModule);

    ProductTableComponent getProductTableComponent(ProductTableModule productTableModule);

    BoughtTableComponent getBoughtTableComponent(BoughtTableModule boughtTableModule);

    CustomerTableComponent getCustomerTableComponent(CustomerTableModule customerTableModule);

    BoughtTableCreditComponent getBoughtTableCreditComponent(BoughtTableCreditModule boughtTableCreditModule);

    RechargeComponent getRechargeComponent(RechargeModule rechargeModule);

    MineScoreComponent getMineScoreComponent(MineScoreModule minescoremodule);

    ModifyInfoComponent getModifyInfoComponent(ModifyInfoModule modifyInfoModule);

    SettingComponent getSettingComponent(SettingModule settingModule);

    InfoCertifyLoanComponent getInfoCertifyLoanComponent(InfoCertifyLoanModule infoCertifyLoanModule);

    InfoCertifyCreditComponent getInfoCertifyCreditComponent(InfoCertifyCreditModule infoCertifyCreditModule);

    PwdModifyComponent getPwdModifyComponent(PwdModifyModule pwdModifyModule);

    ScoreDetailComponent getScoreDetailComponent(ScoreDetailModule scoreDetailModule);

    RecommendScoreComponent getRecommendScoreComponent(RecommendScoreModule recommendScoreModule);

    ProductManageComponent getProductManageComponent(ProductManageModule productManageModule);

    ErrorCorrectionComponent getErrorCorrectionComponent(ErrorCorrectionModule errorCorrectionModule);

    MyBusinessConComponent getMyBusinessConComponent(MyBusinessConModule myBusinessConModule);

}
